package p3.enunciado;

import java.io.*;
import java.net.*;
import p3.IServidor;

/**
 * COMPLEMENTOS DE INFORMATICA 2011-12
 * Practica 3 - ENUNCIADO.
 * @author JAPF
 * 
 * Práctica realizada por : José Vázquez Avilés
 *
 */
public class Servidor implements IServidor {

    // Identificadores de servicios.
    public static final String SendFile = "SF";
    public static final String FilterData = "FT";
    public static final String CloseConnection = "CC";
    // Etiqueta de fin de servicio.
    public static final String EndOfService = "EoS";
    // Etiqueta de fin de conexion.
    public static final String EndOConnection = "EoC";
    protected int listenPort = 3000;
    ServerSocket server;

    /**
     * Crea el socket servidor y se pone a la espera de peticiones de servicio.
     * Cuando llega una petición de servicio crea un hilo para que la sirva
     * y se pone inmediatamente a la espera de la siguiente.
     */
    @Override
    public void aceptarConexiones() throws BindException, IOException {
        System.out.println("Servidor Iterativo. Entering");
        try {
            // Crear socket servidor (server).

            Socket incomingConnection = null;
            while (true) {
                incomingConnection = server.accept();
                handleConnection(incomingConnection);
            }
        } catch (BindException be) {
            be.printStackTrace();
            throw be;
        } catch (IOException ioe) {
            ioe.printStackTrace();
            throw ioe;
        }

    }

    /**
     * Crea y arranca ReceptionHandler.
     */
    @Override
    public void handleConnection(Socket socketToHandle) {
        System.out.println("Servidor Iterativo. Handling connection.");

    }

    /**
     * Cierra el socket servidor
     */
    @Override
    public void shutdown() {
    }

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Servidor servidor = new Servidor();
        servidor.aceptarConexiones();
    }
}
